<?php
namespace app\admin\controller;
use think\Cache;
use think\Controller;
use app\admin\model\Column as Dbcolumn;
use think\Db;
use app\admin\model\Project ;
use app\admin\model\Proinfo;
use think\Session;

/*栏目管理*/
class Column extends Controller{

    public function index(){

        $user=Session::get('user_id');

        echo $user;
        if (!empty($user)){
            //判断是否有session
            $dbcolumn=new Dbcolumn();
            $result=$dbcolumn->show();

            return $this->fetch('',['column'=>$result]);
        }else{

            $this->redirect('admin/login/index');
        }

    }


    //显示栏目
    public function show(){
        $dbcolumn=new Dbcolumn();
        $result=$dbcolumn->show();

        $fh=[
          'code'=>0,
            'msg'=>'发送成功',
            'count'=>$result['num'],
            'data'=>$result['info']
        ];
        $fh=json_encode($fh);
        print_r($fh);

    }


    //新增栏目时选择栏目场景（包含新增顶级栏目选项）
    public function chooseColumn(){

        $result=Db::table('column')->select();
        $tree =[
            [   'id'=>0,
                'name'=>'新增顶级栏目',
                'pid'=>0,
            ]
        ];

        $tree=$this->arrayToTree($result,$tree);

        $tree=json_encode($tree);

        print_r($tree);

    }

    //发布文章时选择栏目场景（不包含新增栏目选项）
    public function sendChooseColumn(){

        $result=Db::table('column')->select();
        $tree =[

        ];

        $tree=$this->arrayToTree($result,$tree);

        $tree=json_encode($tree);

        print_r($tree);

    }

    /**
     * Notes: 将数组处理成树形结构
     * Time: 2022/4/25
     * @param array $items 数组
     * @param string $idName ID键名 例: id
     * @param string $pidName 父ID键名 例: pid
     * @return array
     * &代表引用同一个变量
     */
    function arrayToTree($items,$tree,$idName = 'id', $pidName = 'pid')
    {
//        $tree =[
//            [   'id'=>0,
//                'name'=>'新增顶级栏目',
//                'pid'=>0,
//            ]
//        ];
        foreach ($items as $k => $item) {

            if ($item[$pidName] == 0) {


                $tree[] =& $items[$k];

            }
            else {
                foreach ($items as $key => $v) {
                    if ($v[$idName] == $item[$pidName]) {

                        $items[$key]['children'][] =& $items[$k];

                    }
                }
            }
        }
        return $tree;
    }










    //新增栏目
    public function addcolumn(){
        $columnname=input('name');//栏目名称
        $columnId=input('id');//上级栏目id
        $directoryName=input('directoryName');//栏目目录名称
        $type=input('type');//栏目类型
        $seo_title=input('seo_title');//seo标题
        $keywords=input('keywords');//关键字
        $description=input('description');//描述

        $dbcolumn=new Dbcolumn();
        $result=$dbcolumn->Deduplication($columnname);//防止添加重复栏目名称

        $father_type=$dbcolumn->type($columnId);

        switch ($type){
            case 1:
                $cover_template=input('cover_template');//获取封面栏目的值
                $list_templates="";//给个空值
                $article_templates="";
            break;
            case 2:
                $cover_template="";
                $list_templates=input('list_templates');//列表栏目
                $article_templates=input('article_templates');//文章模板
            break;
        }


        /*
         为了确保标红项都填写了
         */

        if ($columnname!=""&&$columnId!=""&&$directoryName!=""){

            /*
         $father_type==1  证明要创建的栏目父栏目为封面栏目
        $columnId==0证明要创建的是一个顶级栏目
        为了限制列表栏目不能创建子栏目
         */
            if ($father_type==1||$columnId==0){


                $Dbproject=new Project();
                $HomePath= $Dbproject->selectHomePath();//根目录路径
                $art_dir_name= $Dbproject->art_dir_name();//文章文件夹名称



                if ($result==-1){
                    //栏目名称不重复

                    //判断路径是否存在
                    try {
                        if (file_exists($HomePath."$art_dir_name/")){


                            if (file_exists($HomePath."$art_dir_name/".$directoryName)){
                                //路径要是存在
                                $fh=[
                                    'code'=>-2,
                                    'message'=>'目录名称重复'
                                ];

                                return json_encode($fh);


                            }else {
                                //不存在就创建
                                mkdir($HomePath."$art_dir_name/$directoryName",0777,true);
                            }

                        }else{
                            mkdir($HomePath."$art_dir_name");//不存在就创建../../Artilcedirectory/
                            mkdir($HomePath."$art_dir_name/$directoryName",0777,true);//开启遍历创建

                        }
                    }catch (\Exception $exception){
                        $fh=[
                            'code'=>-5,
                            'message'=>"创建目录遇到了问题：".$exception->getMessage(),
                        ];

                        return json_encode($fh);

                    }





                    if ($columnId==0){//上级栏目等于0那么就说明是创建顶级栏目
                        $pid=0;//创建顶级栏目，那么父级栏目就是0

                    }else{
                        //如果不是创建顶级栏目，那么pid就等于父级栏目id
                        $pid=$columnId;
                    }

                    $result=$dbcolumn->addcolumn($columnname,$pid,$type,$directoryName,$cover_template,$list_templates,$article_templates,$seo_title,$keywords,$description);

                    if ($result){
                        $fh=[
                            'code'=>1,//添加成功
                        ];
                    }

                }else{
                    //栏目名称重复
                    $fh=[
                        'code'=>-1,
                        'message'=>'栏目名称重复'
                    ];
                }



            }else{

                $fh=[
                    'code'=>-3,
                    'message'=>'列表栏目无法创建子栏目'
                ];


            }
        }else{
            $fh=[
                'code'=>-4,
                'message'=>'有标红项未填写'
            ];
        }





        $fh=json_encode($fh);
        return $fh;



    }


    //编辑修改栏目
    public function edit(){

        $columnname=input('name');//新栏目名称
        $directoryName=input('directoryName');//目录名称
        $type=input('type');//栏目类型
        $id=input('id');//栏目id
        $old_name=input("old_name");//旧栏目名称
        $seo_title=input('seo_title');//seo标题
        $keywords=input('keywords');//关键字
        $description=input('description');//描述

        $dbcolumn=new Dbcolumn();
        if ($old_name==$columnname){
            $result=1;
        }else{
            $result=$dbcolumn->edit_Deduplication($columnname,$id);//防止添加重复栏目名称
        }



        //根据不同的栏目类型获取不同模板信息
        switch ($type){
            case 1:
                $cover_template=input('cover_template');//获取封面栏目的值
                $list_templates="";//给个空值
                $article_templates="";
                break;
            case 2:
                $cover_template="";
                $list_templates=input('list_templates');//列表栏目
                $article_templates=input('article_templates');//文章模板
                break;
        }

        if (!empty($columnname)&&!empty($directoryName)){

            if ($result==1){
                //栏目名称不重复
                $dbcolumn->edit($id,$columnname,$directoryName,$cover_template,$list_templates,$article_templates,$seo_title,$keywords,$description);
                    $fh=[
                        'code'=>1,//修改成功
                        "message"=>"修改成功，请手动修改目录路径或名称"
                    ];


            }else{
                //栏目名称重复
                $fh=[
                    'code'=>-2,
                    'message'=>'栏目名称重复'
                ];
            }

        }else{
            $fh=[
              'code'=>-3,
              'message'=>'有标红项未填写'
            ];


        }

        return json_encode($fh);


    }


    //删除栏目
    public function deleteColumn(){
        $id=input("id");
        $result=$this->recursion($id);

        if ($result['code']<0){
            //说明要删除的栏目中有内容
        return json_encode($result);

        }


        $result2=$this->del($id);


        return json_encode($result2);

    }


    /**
     * @param $id 需要删除的栏目id
     * @return int[]
     */
    public function del($id){


        Db::table("column")->where("id","=",$id)->delete();

        $pidRes= Db::table("column")->where("pid", '=', $id)->field(["id","dir_name"])->select();//返回当前栏目子栏目id结果集



        if (count($pidRes) > 0) {
            for ($i = 0; $i < count($pidRes); $i++) {

                $this->del($pidRes[$i]['id']);
            }

        }
        $fh=[
            "code"=>1,
            "message"=>"栏目删除完毕，请手动删除对应目录内容"
        ];
        return $fh;

    }


    //递归判断删除的栏目是否有内容
    public function  recursion($id){

        $num=Db::table('article')->where('column_id','=',$id)->count();//获取栏目下文章数量

        if ($num>0){
            $column=Db::table('column')->where('id','=',$id)->find();
            $fh=[
              'code'=>-1,
              'message'=>"栏目->".$column['name']."中有".$num."条内容"
            ];
            return $fh;
        }

        $pidRes= Db::table("column")->where("pid", '=', $id)->field("id")->select();//返回当前栏目子栏目id结果集
        if (count($pidRes) > 0) {
            for ($i = 0; $i < count($pidRes); $i++) {
                $Did = $pidRes[$i]['id'];

                $fh=$this->recursion($Did);
                return $fh;

            }

        }


    }



    //列表预览
    public function preview_ListColumns($id,$type){
        $Dbcolumn=new Dbcolumn();
        try {
            $template=$Dbcolumn->template($id,$type);
        }catch (\Exception $exception){
            return "参数异常";
        }
        $Dbcolumn=new Dbcolumn();
        $result=$Dbcolumn->sel_column($id);


        $Dbproinfo=new Proinfo();//项目信息
        $proinfo_res=$Dbproinfo->show();

        $assign_array=[
            "page"=>0,//初始化分页变量
            "preview"=>true,//开启预览模式
            "seo_title"=>$result['seo_title'],//seo标题
            "keywords"=>$result['keywords'],//关键字
            "description"=>$result['description'],//描述
            "pj_name"=>$proinfo_res['pj_name'],//项目名称
            "tj"=>$proinfo_res['tj'],//百度统计代码
            "logo"=>$proinfo_res['logo'],//网站logo
            "icp"=>$proinfo_res['icp'],//icp备案
        ];



        if (!empty($template)){

            $this->assign($assign_array);

            return $this->fetch("public/static/templets/index/$template");
        }else{
            return "当前栏目无模板";
        }





    }




        public function build_ListColumns_static(){
            $column_id=input('id');//栏目id
            $dir_name=input('dir_name');//目录名称
            $list_templates=input('list_templates');//列表模板

            $Dbproject=new Project();//项目配置
            $HomePath= $Dbproject->selectHomePath();
            $art_dir_name= $Dbproject->art_dir_name();

            $Dbcolumn=new Dbcolumn();
            $result=$Dbcolumn->sel_column($column_id);


            $Dbproinfo=new Proinfo();//项目信息
            $proinfo_res=$Dbproinfo->show();


            $assign_array=[
                "page"=>1,//当前分页设置为1，获取需要分页的页数
                "preview"=>false,//关闭预览模式
                "seo_title"=>$result['seo_title'],//seo标题
                "keywords"=>$result['keywords'],//关键字
                "description"=>$result['description'],//描述
                "pj_name"=>$proinfo_res['pj_name'],//项目名称
                "tj"=>$proinfo_res['tj'],//百度统计代码
                "logo"=>$proinfo_res['logo'],//网站logo
                "icp"=>$proinfo_res['icp'],//icp备案
            ];

            $this->assign($assign_array);
            $this->fetch("public/static/templets/index/$list_templates");
            $number=Cache::get("number");//获取到缓存中需要渲染的次数




            for ($i=1;$i<=$number;$i++){

                $assign_array2=[
//                    "chahe"=>"true",
                    "page"=>$i,//分页根据循环来
                    "preview"=>false,//关闭预览模式
                    "keywords"=>$result['keywords'],//关键字
                    "description"=>$result['description'],//描述
                    "pj_name"=>$proinfo_res['pj_name'],//项目名称
                    "tj"=>$proinfo_res['tj'],//百度统计
                    "logo"=>$proinfo_res['logo'],//网站logo
                    "icp"=>$proinfo_res['icp'],//icp备案
                ];
                $this->assign($assign_array2);

                    $this->fetch("public/static/templets/index/$list_templates");
                    $this->buildHtml('list_'.$i,$HomePath."$art_dir_name/$dir_name/","public/static/templets/index/$list_templates");
                }

            Cache::rm('number');//生成完删除缓存

            return $fh="生成完毕";


        }



        //根据id查出栏目信息
        public function column_info(){
        $id=input('id');//栏目id
        $Dbcolumn=new Dbcolumn();
        $result=$Dbcolumn->sel_column($id);
        return json_encode($result);
        }










}
